package com.media.system.service.dto;

import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;

import jakarta.validation.constraints.Size;
import java.math.BigDecimal;

/**
 * 文件上传请求
 * 
 * @author Claude
 * @since 2024-01-20
 */
@Data
@Schema(description = "文件上传请求")
public class FileUploadRequest {

    /**
     * 家庭ID
     */
    @Schema(description = "家庭ID")
    private Long familyId;

    /**
     * 用户标签
     */
    @Size(max = 500, message = "用户标签长度不能超过500个字符")
    @Schema(description = "用户自定义标签，逗号分隔")
    private String userTags;

    /**
     * 是否公开
     */
    @Schema(description = "是否公开", allowableValues = {"0", "1"}, example = "0")
    private Integer isPublic = 0;

    /**
     * GPS纬度
     */
    @Schema(description = "GPS纬度")
    private BigDecimal latitude;

    /**
     * GPS经度
     */
    @Schema(description = "GPS经度")
    private BigDecimal longitude;

    /**
     * 拍摄地点
     */
    @Size(max = 200, message = "拍摄地点长度不能超过200个字符")
    @Schema(description = "拍摄地点")
    private String location;

    /**
     * 自动生成缩略图
     */
    @Schema(description = "是否自动生成缩略图", example = "true")
    private Boolean generateThumbnail = true;

    /**
     * AI标签识别
     */
    @Schema(description = "是否启用AI标签识别", example = "true")
    private Boolean enableAiTags = true;

    /**
     * 文件夹路径
     */
    @Size(max = 500, message = "文件夹路径长度不能超过500个字符")
    @Schema(description = "上传到指定文件夹路径")
    private String folderPath;

    /**
     * 重复文件处理方式
     */
    @Schema(description = "重复文件处理方式", allowableValues = {"skip", "overwrite", "rename"}, example = "rename")
    private String duplicateHandling = "rename";

    /**
     * 压缩质量
     */
    @Schema(description = "图片压缩质量 (1-100)", minimum = "1", maximum = "100", example = "85")
    private Integer compressionQuality = 85;

    /**
     * 备注
     */
    @Size(max = 500, message = "备注长度不能超过500个字符")
    @Schema(description = "文件备注")
    private String remark;
}